; ASSIST09 for the Arcom SC09 ; ; Restoration project: the original has bits fading to 1 on d0 and d1 ; ; Step 1: unedited ; ; .cpu 6809 .org $F000 original equ 0 SP equ $20 ; from https://github.com/tgtakaoka/ASSIST09/blob/main/src/ASSIST09.ASM ; ; ; ; TTL ASSIST09 - MC6809 MONITOR ; OPT ABS,LLE=85,S,CRE ;************************************ ; COPYRIGHT (C) MOTOROLA, INC. 1979 * ;************************************ ;************************************ ; THIS IS THE BASE ASSIST09 ROM. ; IT MAY RUN WITH OR WITHOUT THE ; EXTENSION ROM WHICH ; WHEN PRESENT WILL BE AUTOMATICALLY ; INCORPORATED BY THE BLDVTR ; SUBROUTINE ;************************************ ;******************************************** ; GLOBAL MODULE EQUATES ;******************************************* ROMBEG EQU $F000 ; ROM START ASSEMBLY ADDRESS 4k EPROM ; RAMOFS EQU -$1900 ; ROM OFFSET TO RAM WORK PAGE ; ; SC09 has RAM at EC00-EFFF so F000 - EC00 = 400 hex ; RAMOFS EQU -$400 ; ROM OFFSET TO RAM WORK PAGE SC09 ROMSIZ EQU 4096 ; ROM SIZE SC09 ROM2OF EQU ROMBEG-ROMSIZ ; START OF EXTENSION ROM ACIA EQU $EA00 ; DEFAULT ACIA ADDRESS SC09 PTM EQU $E800 ; DEFAULT PTM ADDRESS SC09 DFTCHP EQU 0 ; DEFAULT CHARACTER PAD COUNT DFTNLP EQU 5 ; DEFAULT NEW LINE PAD COUNT PROMPT EQU '>' ; PROMPT CHARACTER NUMBKP EQU 8 ; NUMBER OF BREAKPOINTS ;******************************************** ;******************************************** ; MISCELLANEOUS EQUATES ;******************************************** EOT EQU $04 ; END OF TRANSMISSION BELL EQU $07 ; BELL CHARACTER LF EQU $0A ; LINE FEED CR EQU $0D ; CARRIAGE RETURN DLE EQU $10 ; DATA LINE ESCAPE CAN EQU $18 ; CANCEL (CTRL-X) quote equ $22 ; PTM ACCESS DEFINITIONS PTMSTA EQU PTM+1 ; READ STATUS REGISTER PTMC13 EQU PTM ; CONTROL REGISTER 1 AND 3 PTMC2 EQU PTM+1 ; CONTROL REGISTER 2 PTMTM1 EQU PTM+2 ; LATCH 1 PTMTM2 EQU PTM+4 ; LATCH 2 PTMTM3 EQU PTM+6 ; LATCH 3 SKIP2 EQU $8C ; "CMPX #" OPCODE - SKIPS TWO BYTES ;****************************************** ; ASSIST09 MONITOR SWI FUNCTIONS ; THE FOLLOWING EQUATES DEFINE FUNCTIONS PROVIDED ; BY THE ASSIST09 MONITOR VIA THE SWI INSTRUCTION. ;***************************************** INCHNP EQU 0 ; INPUT CHAR IN A REG - NO PARITY OUTCH EQU 1 ; OUTPUT CHAR FROM A REG PDATA1 EQU 2 ; OUTPUT STRING PDATA EQU 3 ; OUTPUT CR/LF THEN STRING OUT2HS EQU 4 ; OUTPUT TWO HEX AND SPACE OUT4HS EQU 5 ; OUTPUT FOUR HEX AND SPACE PCRLF EQU 6 ; OUTPUT CR/LF SPACE EQU 7 ; OUTPUT A SPACE MONITR EQU 8 ; ENTER ASSIST09 MONITOR VCTRSW EQU 9 ; VECTOR EXAMINE/SWITCH BRKPT EQU 10 ; USER PROGRAM BREAKPOINT PAUSE EQU 11 ; TASK PAUSE FUNCTION NUMFUN EQU 11 ; NUMBER OF AVAILABLE FUNCTIONS ; ; NEXT SUB-CODES FOR ACCESSING THE VECTOR TABLE. ; THEY ARE EQUIVALENT TO OFFSETS IN THE TABLE. ; RELATIVE POSITIONING MUST BE MAINTAINED. ; offset_AVTBL EQU 0 ; ADDRESS OF VECTOR TABLE offset_CMDL1 EQU 2 ; FIRST COMMAND LIST offset_RSVD EQU 4 ; RESERVED HARDWARE VECTOR offset_SWI3 EQU 6 ; SWI3 ROUTINE offset_SWI2 EQU 8 ; SWI2 ROUTINE offset_FIRQ EQU 10 ; FIRQ ROUTINE offset_IRQ EQU 12 ; IRQ ROUTINE offset_SWI EQU 14 ; SWI ROUTINE offset_NMI EQU 16 ; NMI ROUTINE offset_RESET EQU 18 ; RESET ROUTINE offset_CION EQU 20 ; CONSOLE ON offset_CIDTA EQU 22 ; CONSOLE INPUT DATA offset_CIOFF EQU 24 ; CONSOLE INPUT OFF offset_COON EQU 26 ; CONSOLE OUTPUT ON offset_CODTA EQU 28 ; CONSOLE OUTPUT DATA offset_COOFF EQU 30 ; CONSOLE OUTPUT OFF offset_HSDTA EQU 32 ; HIGH SPEED PRINTDATA offset_BSON EQU 34 ; PUNCH/LOAD ON offset_BSDAT EQU 36 ; PUNCH/LOAD DATA offset_BSOFF EQU 38 ; PUNCH/LOAD OFF offset_PAUSE EQU 40 ; TASK PAUSE ROUTINE offset_EXPAN EQU 42 ; EXPRESSION ANALYZER offset_CMDL2 EQU 44 ; SECOND COMMAND LIST offset_ACIA EQU 46 ; ACIA ADDRESS offset_PAD EQU 48 ; CHARACTER PAD AND NEW LINE PAD offset_ECHO EQU 50 ; ECHO/LOAD AND NULL BKPT FLAG offset_PTM EQU 52 ; PTM ADDRESS NUMVTR EQU 52/2+1 ; NUMBER OF VECTORS HIVTR EQU 52 ; HIGHEST VECTOR OFFSET ;***************************************** ; WORK AREA ; THIS WORK AREA IS ASSIGNED TO THE PAGE ADDRESSED BY ; -$1800,PC FROM THE BASE ADDRESS OF THE ASSIST09 ; ROM. THE DIRECT PAGE REGISTER DURING MOST ROUTINE ; OPERATIONS WILL POINT TO THIS WORK AREA. THE STACK ; INITIALLY STARTS UNDER THE RESERVED WORK AREAS AS ; DEFINED HEREIN. ;***************************************** WORKPG EQU ROMBEG+RAMOFS ; SETUP DIRECT PAGE ADDRESS ;;; SETDP WORKPG!>8 ; NOTIFY ASSEMBLER does not assemble!!! ORG WORKPG+256 ; READY PAGE DEFINITIONS ; THE FOLLOWING THRU BKPTOP MUST RESIDE IN THIS ORDER ; FOR PROPER INITIALIZATION ORG $-4 PAUSER EQU $ ; PAUSE ROUTINE ORG $-1 SWIBFL EQU $ ; BYPASS SWI AS BREAKPOINT FLAG ORG $-1 BKPTCT EQU $ ; BREAKPOINT COUNT ORG $-2 SLEVEL EQU $ ; STACK TRACE LEVEL ORG $-NUMVTR*2 VECTAB EQU $ ; VECTOR TABLE ORG $-2*NUMBKP BKPTBL EQU $ ; BREAKPOINT TABLE ORG $-2*NUMBKP BKPTOP EQU $ ; BREAKPOINT OPCODE TABLE ORG $-2 WINDOW EQU $ ; WINDOW ORG $-2 ADDR EQU $ ; ADDRESS POINTER VALUE ORG $-1 BASEPG EQU $ ; BASE PAGE VALUE ORG $-2 NUMBER EQU $ ; BINARY BUILD AREA ORG $-2 LASTOP EQU $ ; LAST OPCODE TRACED ORG $-2 RSTACK EQU $ ; RESET STACK POINTER ORG $-2 PSTACK EQU $ ; COMMAND RECOVERY STACK ORG $-2 PCNTER EQU $ ; LAST PROGRAM COUNTER ORG $-2 TRACEC EQU $ ; TRACE COUNT ORG $-1 SWICNT EQU $ ; TRACE "SWI" NEST LEVEL COUNT ORG $-1 ; (MISFLG MUST FOLLOW SWICNT) MISFLG EQU $ ; LOAD CMD/THRU BREAKPOINT FLAG ORG $-1 DELIM EQU $ ; EXPRESSION DELIMITER/WORK BYTE ORG $-40 ROM2WK EQU $ ; EXTENSION ROM RESERVED AREA ORG $-21 TSTACK EQU $ ; TEMPORARY STACK HOLD STACK EQU $ ; START OF INITIAL STACK ;***************************************** ; DEFAULT THE ROM BEGINNING ADDRESS TO 'ROMBEG' ; ASSIST09 IS POSITION ADDRESS INDEPENDENT HOWEVER ; WE ASSEMBLE ASSUMING CONTROL OF THE HARDWARE VECTORS. ; NOTE THAT THE WORK RAM PAGE MUST BE 'RAMOFS' ; FROM THE ROM BEGINNING ADDRESS. ;******************************************* ORG ROMBEG ; ROM ASSEMBLY/DEFAULT ADDRESS ;**************************************************** ; BLDVTR - BUILD ASSIST09 VECTOR TABLE ; HARDWARE RESET CALLS THIS SUBROUTINE TO BUILD THE ; ASSIST09 VECTOR TABLE. THIS SUBROUTINE RESIDES AT ; THE FIRST BYTE OF THE ASSIST09 ROM, AND CAN BE ; CALLED VIA EXTERNAL CONTROL CODE FOR REMOTE ; ASSIST09 EXECUTION. ; INPUT: S->VALID STACK RAM ; OUTPUT: U->VECTOR TABLE ADDRESS ; DPR->ASSIST09 WORK AREA PAGE ; THE VECTOR TABLE AND DEFAULTS ARE INITIALIZED ; ALL REGISTERS VOLATILE. ;************************************************* L_f000: .db $ee,$2d ; LDU [ ?? ,S] .db $ee,$2f ; LDU [ ?? ,S] .db $ee,$31 ; LDU [ ?? ,S] .db $ee,$33 ; LDU [ ?? ,S] .db $f9,$d1 ; ADCB ? BLDVTR: .db $30,$8c,$b4 TFR X,D ; OBTAIN BASE PAGE ADDRESS TFR A,DP ; SETUP DPR .db $b7,$ef,$9c ; STA BASEPG ; STORE FOR QUICK REFERENCE LEAU ,X ; RETURN TABLE TO CALLER .db $31,$8c,$28 ; LEAY .....;........| L_f090: .db $03,$4c,$ae,$64,$6a,$8d,$fe,$f7,$17,$02,$a6,$ee,$6a,$33,$5f,$7d ;.L.dj.......j3_}| L_f0a0: .db $ef,$fa,$26,$11,$17,$07,$73,$50,$5a,$2b,$0a,$11,$a3,$a1,$26,$f8 ;..&...sPZ+....&.| L_f0b0: .db $ef,$6b,$16,$02,$a0,$7f,$ef,$fa,$37,$06,$c1,$0b,$10,$22,$02,$90 ;.k......7...."..| L_f0c0: .db $ef,$6b,$5a,$33,$8c,$b4,$ec,$c5,$6e,$cb ;.kZ3....n. SIGNON: L_f0ca: .if original = 1 .db "MASTER-ASSIST ARC-1.0", CR, LF+1 L_f0e1: .db "FOR ARCOM SC09", CR, LF+1 L_f0f1: .db "AFAPTED FROM ASSIST29", CR, LF .db "COURTESY#OF MOUOROMA INC/" .db EOT+1 .else .db "MASTER-ASSIST ARC-1.0", CR, LF L_f0e1: .db "FOR ARCOM SC09", CR, LF L_f0f1: .db "ADAPTED FROM ASSIST09", CR, LF .db "COURTESY OF MOTOROLA INC." .db EOT .endif ; .org $F122 ; force alignment L_f122: .db $12,$ff,$ef,$97 .db $1d,$bf,$be,$ef,$f5,$27,$27,$6f,$02,$6f L_f130: .db $03,$87,$83,$a7,$01,$87,$a7,$a7,$86,$86,$82,$a7,$01 ;;; ZMONTR: STS RSTACK ; SAVE FOR BAD STACK RECOVERY TST 1,S ; ? INIT CONSOLE AND SEND MSG .db $27,$13 ;;; This seems to have been commented out for SC09 ;;; BNE ZMONT2 ; BRANCH IF NOT .db $ad,$9f,$fe,$92 ; JSR [VECTAB+offset_CION,PC] ; READY CONSOLE INPUT .db $ad,$9d,$fe,$92 ; JSR [VECTAB+offset_COON,PC] ; READY CONSOLE OUTPUT .db $31,$8d,$ff,$7d ; LEAX SIGNON,PC ; READY SIGNON EYE-CATCHER SWI ; PERFORM FCB PDATA ; PRINT STRING ZMONT2: .db $20,$03 ; BRA .if original = 99 ZMONT2: LDX VECTAB+offset_PTM ; LOAD PTM ADDRESS BEQ CMD ; BRANCH IF NO TO USE A PTM CLR PTMTM1-PTM,X ; SET LATCH TO CLEAR RESET CLR PTMTM1+1-PTM,X ; AND SET GATE HIGH LDD #$01A6 ; SETUP TIMER 1 MODE STA PTMC2-PTM,X ; SETUP FOR CONTROL REGISTER 1 STB PTMC13-PTM,X ; SET OUTPUT ENABLED/ ; SINGLE SHOT/ DUAL 8 BIT/INTERNAL MODE/OPERATE CLR PTMC2-PTM,X ; SET CR2 BACK TO RESET FORM ; FALL INTO COMMAND PROCESSOR .endif ;************************************************** ; COMMAND HANDLER ; BREAKPOINTS ARE REMOVED AT THIS TIME. ; PROMPT FOR A COMMAND, AND STORE ALL CHARACTERS ; UNTIL A SEPARATOR ON THE STACK. ; SEARCH FOR FIRST MATCHING COMMAND SUBSET, ; CALL IT OR GIVE '?' RESPONSE. ; DURING COMMAND SEARCH: ; B=OFFSET TO NEXT ENTRY ON X ; U=SAVED S ; U-1=ENTRY SIZE+2 ; U-2=VALID NUMBER FLAG (>=0 VALID)/COMPARE CNT ; U-3=CARRIAGE RETURN FLAG (0=CR HAS BEEN DONE) ; U-4=START OF COMMAND STORE ; S+0=END OF COMMAND STORE ;********************************************** .org $F151 ; force alignment L_f151: .db $4d,$3e,$04 CMD: SWI ; TO NEW LINE .db PCRLF ; FUNCTION CMDNEP: .db $17,$06,$c1 ; LBSR CBKLDR ; OBTAIN BREAKPOINT POINTERS .db $2a,$0d ; BPL CMDNOL ; BRANCH IF NOT ARMED OR NONE NEGB ; MAKE POSITIVE .db $f7,$ef,$f9 CMDDDL: DECB ; ? FINISHED L_f160: .db $2b,$07 ; BMI CMDNOL ; BRANCH IF FINISHED .if original = 1 .db $a6,$32 ; looks like that should be $30 .else LDA -NUMBKP*2,Y ; LOAD OPCODE STORED .endif STA [,Y++] ; STORE BACK OVER "SWI" .if original = 1 .db $21,$f7 ; should be $20 ? .db $af,$6b; should be $6a .db $bf,$ef,$92 .else BRA CMDDDL ; LOOP UNTIL DONE CMDNOL: LDX 10,S ; LOAD USERS PROGRAM COUNTER STX PCNTER ; SAVE FOR EXPRESSION ANALYZER .endif .db $31,$8c,$e3 ;+..2..!..k...1..| L_f170: SWI .db $03 .db $33,$e6,$ff,$ef,$95,$4f,$5f,$fd,$ef,$9a,$fd,$ef,$8e,$fd ;?.3....O_.......| L_f180: .db $ef,$93,$c6,$02,$34,$07,$17,$06,$a9,$31,$8d,$05,$e7 .db $81,$2f,$27 ;....4....1..../'| L_f190: .db $57,$33,$8f,$05,$48 .db $81,$2f,$27,$4f,$81,$21,$23,$15,$34,$02,$6c ;W3..H./'O.!#.4.l| L_f1a0: .db $5f .db $81,$2f,$27,$4d,$17,$04,$5f,$27,$02,$6b,$5e,$17,$04,$83,$20 ;_./'M.._'.k^... | L_f1b0: .db $e9,$81,$0f,$a7,$5d,$bf,$ef,$c3,$e6,$81,$2b,$0d,$10,$fe,$ef,$95 ;....].....+.....| L_f1c0: .db $31,$8d,$03,$79 SWI .db $03 .db $21,$8d,$5b,$e1,$5f,$25,$03,$3b,$21,$e9 ;1..y?.!.[._%.;!.| L_f1d0: .db $31,$5d,$a7,$5f,$81,$03,$a7,$5e,$5a,$a6,$81,$a1,$a2,$26,$ee,$6b ;1]._...^Z....&.k| L_f1e0: .db $5f,$27,$f5,$3b,$ed,$1e,$30,$8b,$6d,$5d,$33,$c4,$ad,$1e,$16,$ff ;_'.;..0.m]3.....| L_f1f0: .db $77,$6d,$5f,$2b,$c7,$31,$89,$a7,$fd,$ef,$9b,$21,$eb,$ff,$05,$43 ;wm_+.1.....!...C| L_f200: .db $05,$bf,$04,$43,$04,$71,$04,$44,$05,$02,$04,$45,$06,$16,$04,$47 ;...C.q.D...E...G| L_f210: .db $04,$29,$04,$4c,$05,$43,$04,$4d,$04,$67,$04,$4e,$05,$6c,$04,$4f ;.).L.C.M.g.N.l.O| L_f220: .db $05,$7c,$04,$50,$05,$15,$04,$52,$02,$ca,$04,$53,$05,$62,$04,$54 ;.|.P...R...S.b.T| L_f230: .db $05,$3c,$04,$56,$05,$35,$04,$57,$04,$cc,$08 L_f23b: .db "SLAVE" L_f240: .db $06,$8c,$07 L_f243: .db "FILL" .db $06,$ed,$07 L_f24A: .db "COPY" .db $06,$fd L_f250: .db $ff ;************************************************ ; [SWI FUNCTIONS 4 AND 5] ; 4 - OUT2HS - DECODE BYTE TO HEX AND ADD SPACE ; 5 - OUT4HS - DECODE WORD TO HEX AND ADD SPACE ; INPUT: X->BYTE OR WORD TO DECODE ; OUTPUT: CHARACTERS SENT TO OUTPUT HANDLER ; X->NEXT BYTE OR WORD ;************************************************* .if original = 1 .db $a6,$80 .db $34,$06 .db $c6,$10 .db $3d .db $8d,$04 .db $35,$06 .db $84,$0f .db $8b,$90 L_f260: .db $19 .db $89,$40 .db $19 .db $6e,$9d,$fd,$75 .db $8d,$e7 .db $8d,$e5 .db $af,$64 .else ZOUT2H: LDA ,X+ ; LOAD NEXT BYTE PSHS D ; SAVE - DO NOT REREAD LDB #16 ; SHIFT BY 4 BITS MUL ; WITH MULTIPLY BSR ZOUTHX ; SEND OUT AS HEX PULS D ; RESTORE BYTES ANDA #$0F ; ISOLATE RIGHT HEX ZOUTHX: ADDA #$90 ; PREPARE A-F ADJUST DAA ; ADJUST ADCA #$40 ; PREPARE CHARACTER BITS DAA ; ADJUST SEND: JMP [VECTAB+offset_CODTA,PC] ; SEND TO OUT HANDLER ZOT4HS: BSR ZOUT2H ; CONVERT FIRST BYTE ZOT2HS: BSR ZOUT2H ; CONVERT BYTE TO HEX STX 4,S ; UPDATE USERS X REGISTER .endif ; FALL INTO SPACE ROUTINE ;************************************************ ; [SWI FUNCTION 7] ; SPACE - SEND BLANK TO OUTPUT HANDLER ; INPUT: NONE ; OUTPUT: BLANK SEND TO CONSOLE HANDLER ;************************************************ .if original = 1 .db $86,$20 ;..@.n..u.....d. | L_f270: .db $20,$3c .else ZSPACE: LDA #' ' ; LOAD BLANK BRA ZOTCH2 ; SEND AND RETURN .endif ;************************************************** ; [SWI FUNCTION 9] ; SWAP VECTOR TABLE ENTRY ; INPUT: A=VECTOR TABLE CODE (OFFSET) ; X=0 OR REPLACEMENT VALUE ; OUTPUT: X=PREVIOUS VALUE ;************************************************** .if original = 1 .db $a6,$61 .db $81,$34 .db $22,$38 .db $10,$be,$ef,$c1 .db $ee,$a6 .db $ef,$64 L_f280: .db $ae,$7e .db $27,$2c .db $af,$a6 .db $20,$28 .else ZVSWTH: LDA 1,S ; LOAD REQUESTERS A CMPA #HIVTR ; ? SUB-CODE TOO HIGH BHI ZOTCH3 ; IGNORE CALL IF SO LDY VECTAB+offset_AVTBL ; LOAD VECTOR TABLE ADDRESS LDU A,Y ; U=OLD ENTRY STU 4,S ; RETURN OLD VALUE TO CALLERS X STX -2,S ; ? X=0 BEQ ZOTCH3 ; YES, DO NOT CHANGE ENTRY STX A,Y ; REPLACE ENTRY BRA ZOTCH3 ; RETURN FROM SWI .endif ;D ;*********************************************** ; [SWI FUNCTION 0] ; INCHNP - OBTAIN INPUT CHAR IN A (NO PARITY) ; NULLS AND RUBOUTS ARE IGNORED. ; AUTOMATIC LINE FEED IS SENT UPON RECEIVING A ; CARRIAGE RETURN. ; UNLESS WE ARE LOADING FROM TAPE. ;*********************************************** .if original = 1 .db $8d,$5c .db $8d,$5e .db $24,$fa .db $4d .db $27 L_f290: .db $f9 .db $a7,$61 .db $7d,$ef,$8e .db $26,$18 .db $81,$0d .db $26,$04 .db $86,$0a .db $8d,$c4 L_f2a0: .db $7d,$ef,$f3 .db $26,$0b .else ZINCHP: BSR XQPAUS ; RELEASE PROCESSOR ZINCH: BSR XQCIDT ; CALL INPUT DATA APPENDAGE BCC ZINCHP ; LOOP IF NONE AVAILABLE TSTA BEQ ZINCH ; IGNORE NULL CMPA #$7F ; ? RUBOUT BEQ ZINCH STA 1,S ; STORE INTO CALLERS A TST MISFLG ; ? LOAD IN PROGRESS BNE ZOTCH3 ; BRANCH IF SO TO NOT ECHO CMPA #CR BNE ZIN2 LDA #LF BSR SEND ZIN2: TST VECTAB+offset_ECHO ; ECHO DESIRED BNE ZOTCH3 .endif ; FALL THROUGH TO OUTCH ;********************************************** ; [SWI FUNCTION 1] ; OUTCH - OUTPUT CHARACTER FROM A ; INPUT: NONE ; OUTPUT: IF LINEFEED IS THE OUTPUT CHARACTER THEN ; C=0 NO CTL-X RECEIVED, C=1 CTL-X RECEIVED ;********************************************** .if original = 1 .db $a6,$61 .db $30,$8c, $0a .db $81,$0a .db $27,$10 .db $8d,$b4 ;}..&..a0....'...| L_f2b0: .db $7d,$ef,$8f .db $3b .db $04 .db $30,$8c,$fc .else ZOTCH1: LDA 1,S ; LOAD CHARACTER TO SEND LEAX STRING ; OUTPUT: CR/LF AND STRING SENT TO OUTPUT CONSOLE ; HANDLER ; C=0 NO CTL-X, C=1 CTL-X RECEIVED ; NOTE: LINE FEED MUST FOLLOW CARRIAGE RETURN FOR ; PROPER PUNCH DATA. ;************************************************ .if original = 1 .db $86,CR .db $8d,$a8 .db $86,LF .else ZPDATA: LDA #CR ; LOAD CARRIAGE RETURN BSR SEND ; SEND IT LDA #LF ; LOAD LINE FEED ; FALL INTO PDATA1 .endif ;************************************************ ; [SWI FUNCTION 2] ; PDATA1 - OUTPUT STRING TILL EOT ($04) ; THIS ROUTINE PAUSES IF AN INPUT BYTE BECOMES ; AVAILABLE DURING OUTPUT TRANSMISSION UNTIL A ; SECOND IS RECEIVED. ; INPUT: X->STRING ; OUTPUT: STRING SENT TO OUTPUT CONSOLE DRIVER ; C=0 NO CTL-X, C=1 CTL-X RECEIVED ;************************************************ .if original = 1 .db $8d,$a4 ;}..;.0..........| L_f2c0: .db $a7,$80 .db $81,$04 .db $26,$f8 .else ZPDTLP: BSR SEND ; SEND CHARACTER TO DRIVER ZPDAT1: LDA ,X+ ; LOAD NEXT CHARACTER CMPA #EOT ; ? EOT BNE ZPDTLP ; LOOP IF NOT ; FALL INTO PAUSE CHECK FUNCTION .endif ;******************************************* ; [SWI FUNCTION 12] ; PAUSE - RETURN TO TASK DISPATCHING AND CHECK ; FOR FREEZE CONDITION OR CTL-X BREAK ; THIS FUNCTION ENTERS THE TASK PAUSE HANDLER SO ; OPTIONALLY OTHER 6809 PROCESSOR MAY GAIN CONTROL. ; UPON RETURN, CHECK FOR A 'FREEZE' CONDITION ; WITH A RESULTING WAIT LOOP, OR CONDITION CODE ; RETURN IF A CONTROL-X IS ENTERED FROM THE INPUT ; HANDLER. ; OUTPUT: C=1 IF CTL-X HAS ENTERED, C=0 OTHERWISE ;***************************************** .if original = 1 .db $8d,$1e .db $8d,$06 .db $1f,$a9 .db $e7,$e4 .db $20,$e0 ;....&......... .| .else ZPAUSE: BSR XQPAUS ; RELEASE CONTROL AT EVERY LINE BSR CHKABT ; CHECK FOR FREEZE OR ABORT TFR CC,B ; PREPARE TO REPLACE CC STB ,S ; OVERLAY OLD CCR ON STACK BRA ZOTCH3 ; RETURN FROM "SWI" .endif ; CHKABT - SCAN FOR INPUT PAUSE/ABORT DURING OUTPUT ; OUTPUT: C=0 OK, C=1 ABORT (CTL-X ISSUED) ; VOLATILE U,X,D .if original = 1 L_f2d0: .db $8d,$18 .db $26,$05 ;; $24 .db $81,$19 ;; $18 .db $27,$02 ;; $26 .db $53 RTS .else CHKABT: BSR XQCIDT ; ATTEMPT INPUT BCC CHKRTN ; BRANCH NO TO RETURN CMPA #CAN ; ? CTL-X FOR ABORT BNE CHKWT ; BRANCH NO TO PUASE CHKSEC: COMB ; SET CARRY CHKRTN: RTS ; RETURN TO CALLER WITH CC SET .endif .if original = 1 L_f2da: .db $8d,$0a .db $8d,$0c .db $24,$fa L_f2e0: .db $81,$19 .db $27,$f4 .db $4f RTS .else CHKWT: BSR XQPAUS ; PAUSE FOR A MOMENT BSR XQCIDT ; ? KEY FOR START BCC CHKWT ; LOOP UNTIL RECEIVED CMPA #CAN ; ? ABORT SIGNALED FROM WAIT BEQ CHKSEC ; BRANCH YES CLRA ; SET C=0 FOR NO ABORT RTS ; AND RETURN .endif ; SAVE MEMORY WITH JUMPS .if original = 1 L_f2e6: .db $6e,$9d,$fc,$ff .db $6f,$9d,$fc,$e9 .db $84,$7f L_f2f0: RTS .else XQPAUS: JMP [VECTAB+offset_PAUSE,PC] ; TO PAUSE ROUTINE XQCIDT: JSR [VECTAB+offset_CIDTA,PC] ; TO INPUT ROUTINE ANDA #$7F ; STRIP PARITY RTS .endif ;******************************************* ; NMI DEFAULT INTERRUPT HANDLER ; THE NMI HANDLER IS USED FOR TRACING INSTRUCTIONS. ; TRACE PRINTOUTS OCCUR ONLY AS LONG AS THE STACK ; TRACE LEVEL IS NOT BREACHED BY FALLING BELOW IT. ; TRACING CONTINUES UNTIL THE COUNT TURNS ZERO OR ; A CTL-X IS ENTERED FROM THE INPUT CONSOLE DEVICE. ;******************************************** .if original = 1 L_f2f1 .db $4f,$52,$ad,$04 .db $8d,$4a .db $7d,$ef,$8e .db $26,$3a .db $7d,$ef,$8f .db $2b,$2f .db $31,$6e .db $bc,$ef,$f7 .db $25,$27 .db $30,$8c,$e6 SWI .db $02 .else MSHOWP: .db 'O', 'P', '-', EOT ; OPCODE PREP NMIR: BSR LDDP ; LOAD PAGE AND VERIFY STACK TST MISFLG ; ? THRU A BREAKPOINT BNE NMICON ; BRANCH IF SO TO CONTINUE TST SWICNT ; ? INHIBIT "SWI" DURING TRACE BMI NMITRC ; BRANCH YES LEAX 12,S ; OBTAIN USERS STACK POINTER CMPX SLEVEL ; ? TO TRACE HERE BLO NMITRC ; BRANCH IF TOO LOW TO DISPLAY LEAX MSHOWP,PC ; LOAD OP PREP SWI ; SEND TO CONTINUE FCB PDATA1 ; FUNCTION LDDP equ $ ; dummy value for now! NMICON equ $ ; dummy value for now! .endif .if original = 1 .db $79,$ef,$8d L_f310: .db $31,$8d,$fe,$84 SWI .db $05 .db $8d,$1a .db $25,$3d .db $76,$ef,$8d,$25,$38,$be ;1...?...%=v..%8.| L_f320: .db $ef,$90,$27,$33,$30,$1f,$bf,$ef,$90,$27,$2d,$8d,$a3,$25,$28,$17 ;..'30....'-..%(.| L_f330: .db $05,$41,$17,$03,$e2 RTS L_f336: .db $7f,$ef,$8e .db $17,$03,$26 .db $3b SWI .db $07 .db $21 L_f340: .db $07 .db $e7,$8f,$fc,$57 .db $1f,$9b ; TFR B,DP ; SETUP DIRECT PAGE REGISTER .db $a1,$63 ; CMPA 3,S ; ? IS STACK VALID .db $26,$01 RTS .else ROL DELIM ; SAVE CARRY BIT LEAX LASTOP,PC ; POINT TO LAST OP SWI ; SEND OUT AS HEX FCB OUT4HS ; FUNCTION BSR REGPRS ; FOLLOW MEMORY WITH REGISTERS BCS ZBKCMD ; BRANCH IF "CANCELED" ROR DELIM ; RESTORE CARRY BIT BCS ZBKCMD ; BRANCH IF "CANCELED" LDX TRACEC ; LOAD TRACE COUNT BEQ ZBKCMD ; IF ZERO TO COMMAND HANDLER LEAX -1,X ; MINUS ONE STX TRACEC ; REFRESH BEQ ZBKCMD ; STOP TRACE WHEN ZERO BSR CHKABT ; ? ABORT THE TRACE BCS ZBKCMD ; BRANCH YES TO COMMAND HANDLER NMITRC: LBRA CTRCE3 ; NO, TRACE ANOTHER INSTRUCTION REGPRS: LBSR REGPRT ; PRINT REGISTERS AS FROM COMMAND RTS .endif .if original = 1 .else .endif L_f34c: .db $10,$fe,$ef,$96 ;....W...c&.9....| L_f350: .db $31,$8d,$ea SWI .db $03 .db $8d,$db,$16,$fd,$fc,$8d,$e5,$20,$f7 .if original = 1 .db "CUS!VIMEOUT" .else .db "BUS TIMEOUT" .endif .db EOT .db $35,$01,$1a,$81,$34,$7f L_f370: .db $33,$8d,$eb SWI .db $03 SWI .db $06 .db $17,$ff,$c7,$16,$ff,$d8,$fe,$ef,$ef ;3..?.?..........| L_f380: .db $a7,$c5,$46,$24,$08,$a6,$41,$81,$63,$25,$03,$8b,$e3 RTS L_f38e: .db $87,$03 ;..F$..A.c%...9..| L_f390: .db $bf,$ef,$ef,$a7,$86,$87,$55,$a7,$86,$8f,$01,$0f,$bf,$e8,$04 RTS ; L_f3a0: .db $35,$47,$fe,$ef,$ef,$8d,$1d,$81,$10,$27,$15,$f6,$ef,$f1,$81,$0d ;5G.......'......| L_f3b0: .db $27,$03,$f6,$ef,$f2,$4f,$e7,$e4,$8c,$8d,$13,$6a,$e5,$2a,$fa,$35 ;'....O.....j.*.5| L_f3c0: .db $c7,$17,$ff,$22,$e6,$c5,$c5,$02,$27,$f7,$a7,$41 RTS L_f3cd: .db $35,$10,$8e ;..."....'..A95..| L_f3d0: .db $01,$65,$30,$1f,$26,$fc,$35,$10 RTS RTS RTS L_f3db: .db $ee,$62,$6d,$66,$27 ;.e0.&.5.999.bmf'| L_f3e0: .db $55,$33,$7d SWI .db $01 .db $81,$53,$27,$fb SWI .db $01 .db $81 RTS L_f3ed: .db $27,$22,$81 ;U3}?..S'.?..9'".| L_f3f0: .db $31,$27,$f3,$6f,$e5,$8d,$21,$e7,$61,$8d,$1d,$e7,$63,$8d,$19,$a7 ;1'.o..!.a...c...| L_f400: .db $62,$31,$cb,$8d,$13,$27,$0c,$6d,$69,$2b,$02,$e7,$a4,$e1,$a0,$27 ;b1...'.mi+.....'| L_f410: .db $f2,$35,$92,$4c,$27,$cd,$20,$f9,$8d,$12,$c6,$10,$3d,$8d,$0d,$34 ;.5.L'. .....=..4| L_f420: .db $04,$ab,$e0,$1f,$89,$ab,$62,$a7,$62,$6a,$63 RTS L_f42c: SWI .db $00,$17,$01 ;......b.bjc9?...| L_f430: .db $ea,$27,$f8,$35,$f2,$fe,$ef,$f1,$ae,$64,$34,$56,$cc,$00,$18,$f7 ;.'.5.....d4V....| L_f440: .db $ef,$f1 SWI .db $01,$c6,$04,$fd,$ef,$f1,$ec,$68,$a3,$62,$10,$83,$00 ;..?.......h.b...| L_f450: .db $18,$25,$02,$c6,$17,$5c,$e7,$e4,$cb,$03,$e7,$61,$30,$8c,$35,$3f ;.%...\.....a0.5?| L_f460: .db $03,$5f,$30,$61,$8d,$28,$8d,$26,$8d,$24,$ae,$62,$8d,$20,$6a,$e4 ;._0a.(.&.$.b. j.| L_f470: .db $26,$fa,$af,$62,$53,$e7,$61,$30,$61,$8d,$15,$ae,$68,$ac,$62,$24 ;&..bS.a0a...h.b$| L_f480: .db $c8,$30,$8c,$13 SWI .db $03,$ec,$64,$fd,$ef,$f1,$4f,$35,$d6,$eb,$84 ;.0..?..d...O5...| L_f490: .db $17,$fd,$be RTS L_f494: .db $53,$31,$04,$53 RTS L_f499 .db $30,$33,$30,$30,$30,$30,$46 ;...9S1.S9030000F| L_f4a0: .db $43,$0d,$0a,$04 SWI .db $06 .db $c6,$06 SWI .db $07 .db $5a,$26,$fb,$5f,$1f,$98 ;C...?...?.Z&._..| L_f4b0: .db $17,$fd,$ab SWI .db $07 SWI .db $07 .db $5c,$c1,$10,$25,$f2 SWI .db $06,$25,$2f ;...?.?.\..%.?.%/| L_f4c0: .db $30,$64 SWI .db $05,$ae,$64,$c6,$10 SWI .db $04,$5a,$26,$fb SWI .db $07,$ae ;0d?..d..?.Z&.?..| L_f4d0: .db $65,$c6,$10,$a6,$80,$2b,$04,$81,$20,$24,$02,$86,$2e SWI .db $01,$5a ;e....+.. $...?.Z| L_f4e0: .db $27,$f1,$ac,$62,$24,$09,$af,$64,$a6,$65,$48,$26,$cf,$20,$b5,$3f ;'..b$..d.eH&. .?| L_f4f0: .db $07 RTS L_f422: .db $8d,$23,$4c,$8d,$21 RTS L_f4f7: .db $50,$43,$ff,$13,$41,$00,$0a,$42 ;.9.#L.!9PC..A..B| L_f500: .db $01,$0b,$58,$ff,$0d,$59,$ff,$0f,$55,$ff,$11,$53,$ff,$01,$43,$43 ;..X..Y..U..S..CC| L_f510: .db $01,$09,$46,$50,$00,$0c,$00,$4f,$30,$e8,$10,$34,$32,$31,$8c,$d8 ;..FP...O0..421..| L_f520: .db $ed,$a0,$4d,$2f,$04 SWI .db $01,$20,$f7,$86,$2d SWI .db $01,$30,$e5,$6d ;..M/.?. ..-?.0.m| L_f530: .db $e5,$26,$12,$6d SWI .db $27,$03 SWI .db $05,$8c SWI .db $04,$ec,$a0,$5d,$26 ;.&.m?'.?..?...]&| L_f540: .db $df SWI .db $06,$35,$b2,$8d,$41,$27,$10,$81,$0d,$27,$1f,$e6 SWI .db $5a ;.?.5..A'...'..?Z| L_f550: .db $51,$59 SWI .db $07,$5a,$26,$fb,$20,$e3,$a7,$e4,$fc,$ef,$9a,$6d,$3f ;QY?.Z&. ......m?| L_f560: .db $27,$03,$a6,$82,$ed,$84,$a6,$e4,$81,$0d,$26,$d0,$30,$8d,$fa,$06 ;'.........&.0...| L_f570: .db $c7,$15,$37,$02,$a7,$80,$5a,$26,$f9,$10,$ee,$88,$ec,$c6,$15,$a6 ;..7...Z&........| L_f580: .db $83,$35,$02,$5a,$26,$f9,$20,$bb,$4f,$20,$02,$86,$20,$b7,$ef,$8d ;.5.Z&. .O .. ...| L_f590: .db $6f,$9d,$fa,$57,$34,$14,$8d,$66,$27,$1c,$b1,$ef,$8d,$27,$f7,$be ;o..W4..f'....'..| L_f5a0: .db $ef,$9d,$83,$4d,$27,$18,$bf,$ef,$92,$81,$50,$27,$11,$bf,$ef,$9f ;...M'.....P'....| L_f5b0: .db $81,$57,$27,$0a,$35,$95,$8d,$4c,$27,$fd,$21,$0c,$af,$84,$bf,$ef ;.W'.5..L'.!.....| L_f5c0: .db $9b,$7d,$ef,$8d,$27,$ee,$8d,$6a,$be,$ef,$9a,$81,$2b,$26,$10,$8d ;.}..'..j....+&..| L_f5d0: .db $27,$35,$02,$fc,$ef,$9b,$30,$8b,$bf,$ef,$9a,$35,$02,$20,$e9,$81 ;'5....0....5. ..| L_f5e0: .db $2d,$27,$07,$81,$40,$27,$d5,$5f,$20,$ca,$8d,$0b,$34,$02,$fc,$ef ;-'..@'._ ...4...| L_f5f0: .db $9a,$40,$50,$82,$00,$20,$df,$8d,$92,$27,$36,$16,$fb,$be,$7f,$ef ;.@P.. ...'6.....| L_f600: .db $9a,$7f,$ef,$9b,$8d,$2c,$8d,$13,$26,$27,$c6,$10,$3d,$86,$04,$58 ;.....,..&'..=..X| L_f610: .db $79,$ef,$9b,$79,$ef,$9a,$4a,$26,$f6,$20,$14 ;*************************************** ; CONVERT ASCII CHARACTER TO BINARY BYTE ; INPUT: A=ASCII ; OUTPUT: Z=1 A=BINARY VALUE ; Z=0 IF INVALID ; ALL REGISTERS TRANSPARENT ; (A UNALTERED IF INVALID HEX) ;************************************* if original = 1 .db $81,'0' .db $25,$12 .db $81,'9' L_f621: .db $2f,$0a .db $81,'A' .db $25,$0a .db $81,$46 .db $22,$06 .db $80,$07 .db $84,$0f .db $1a,$04 RTS .else CNVHEX: CMPA #'0' ; ? LOWER THAN A ZERO BLO CNVRTS ; BRANCH NOT VALUE CMPA #'9' ; ? POSSIBLE A-F BLE CNVGOT ; BRANCH NO TO ACCEPT CMPA #'A' ; ? LESS THAN TEN BLO CNVRTS ; RETURN IF MINUS (INVALID) CMPA #'F' ; ? NOT TOO LARGE BHI CNVRTS ; NO, RETURN TOO LARGE SUBA #7 ; DOWN TO BINARY CNVGOT: ANDA #$0F ; CLEAR HIGH HEX CNVOK: ORCC #4 ; FORCE ZERO ON FOR VALID HEX CNVRTS: RTS ; RETURN TO CALLER .endif ; GET INPUT CHAR, ABORT COMMAND IF CONTROL-X (CANCEL) if original = 1 READ: L_f632: SWI .db $00 .db $81,$18 .db $27,$c3 RTS .else READ: SWI ; GET NEXT CHAR FCB INCHNP ; FUNCTION CMPA #CAN ; ? ABORT COMMAND BEQ BLDBAD ; BRANCH TO ABORT IF SO RTS ; RETURN TO CALLER .endif ; ; G ; ;**************GO - START PROGRAM EXECUTION ;; if original = 1 CGO: L_f638: .db $8d,$01 .db $3b GOADDR: PULS X,Y ; RECOVER RETURN ADDRESS PSHS X ; STORE RETURN BACK L_f640: .db $26,$1b ; BNE GONDFT .db $17,$01,$d5 .db $ae,$6c ARMBLP: DECB ; COUNT DOWN .db $2b,$18 ; BMI ARMBK2 LDA -NUMBKP*2,Y ; PRE-FETCH OPCODE CMPX ,Y++ ; ? IS THIS A BREAKPOINT .db $26,$f7 ; BNE ARMBLP ; LOOP IF NOT L_f650: CMPA #$3F ; ? SWI BREAKPOINTED .db $26,$03 ; BNE ARMNSW ; NO, SKIP SETTING OF PASS FLAG .db $b7,$ef,$fa ARMNSW: .db $7c,$ef,$8e .db $16,$01,$14 GONDFT: .db $17,$00,$c7 L_f660: .db $ed,$6c ARMBK2: .db $17,$01,$b5 .db $70,$ef,$f9 ARMLOP: .db $5a .db $2b,$c6 .db $a6,$b4 .db $a7,$30 .db $86,$3f .db $a7,$b1 .db $20,$f3 CCALL: .db $8d,$c5 .db $35,$7f .db $ad,$f1 CGOBRK: SWI .db $0a .db $20,$fc CMEM: .db $17,$00,$a5 L_f682: CMEMN: .db $fd,$ef,$9d CMEM2: .db $be,$ef,$9d .db $17,$fb,$c6 .db $86,$2d ; CMPA #"," ; ? COMMA should be $2c SWI .db OUTCH CMEM4: .db $17,$fe,$f9 .db $27,$0b .db $81,$2c .db $26,$10 .db $bf,$ef,$9d .db $30,$01 .db $20,$f0 CMENUM: .db $f6,$ef,$9b .db $8d,$4b .db $81,$2c .db $27,$e7 ; ; Starts to diverge from original code here... ; CMNOTC: .db $81,$27 ; maybe $22 quote? .db $26,$0c ; BNE CMNOTQ ; BRANCH NO CMESTR: .db $8d,$84 ; BSR READ ; OBTAIN NEXT CHARACTER .db $81,$27 ; maybe $22 quote? L_f6b0: .db $27,CR .db $1f,$89 .db $8d,$39 L_f6b6: .db $20,$f4 .db $81,$20 .db $26,$07 .db $bf,$ef,$9d .db $3f L_f6c0: .db $07 .db $20,$c2 .db $81,$0a .db $26,$09 .db $86,$0d SWI .db OUTCH .db $bf,$ef,$9d,$20,$0b ;. ...&...?.... .| L_f6d0: .db $81,$5e,$26,$0b,$30,$1e,$bf,$ef,$9d SWI .db $06 .db $8d,$07,$20,$a6,$81 ;.^&.0....?... ..| L_f6e0: .db $2f,$27,$f6 RTS ; ; PRINT CURRENT ADDRESS ; .if original = 1 L_f6e4: .db $be,$ef,$9d .db $34,$10 .db $30,$e4 SWI .db OUT4HS ; 5 .db $35,$90 .db $be,$ef,$9d .db $e7,$80 .db $e1,$1f .db $26,$04 .db $bf,$ef,$9d RTS .else ; PRINT CURRENT ADDRESS PRTADR: LDX ADDR ; LOAD POINTER VALUE PSHS X ; SAVE X ON STACK LEAX ,S ; POINT TO IT FOR DISPLAY SWI ; DISPLAY POINTER IN HEX FCB OUT4HS ; FUNCTION PULS PC,X ; RECOVER POINTER AND RETURN ; UPDATE BYTE MUPDAT: LDX ADDR ; LOAD POINTER VALUE STB ,X+ ; SAVE X ON STACK CMPB -1,X ; ? SUCCESSFUL STORE BNE MUPBAD ; BRANCH FOR '?' IF NOT STX ADDR ; STORE NEW POINTER VALUE RTS ; BACK TO CALLER .endif .if original = 1 L_f6fc: .db $34,$02 .db $86,$3f ;......&....94..?| L_f700: SWI .db OUTCH .db $35,$82 .db $8d,$21 .db $fd,$ef,$9f RTS .else MUPBAD: PSHS A ; SAVE A REGISTER LDA #'?' ; SHOW INVALID SWI ; SEND OUT FCB OUTCH ; FUNCTION PULS PC,A ; RETURN TO CALLER ;********************WINDOW - SET WINDOW VALUE CWINDO: BSR CDNUM ; OBTAIN WINDOW VALUE STD WINDOW ; STORE IT IN RTS ; END COMMAND .endif ;*****************DISPLAY - HIGH SPEED DISPLAY MEMORY .if original = 1 L_f70a: .db $8d,$1b .db $c4,$f0 .db $1f,$02 L_f710: .db $31,$2f,$25,$04,$8d,$11,$30,$ab,$34,$30 .db $10,$a3,$62 .db $23,$02 .db $ed,$e5 .db $ad,$9f,$f8,$bc .db $35,$e0 CDNUM: .db $17,$fe,$61 .db $26,$0a .db $81,$2f .db $22,$06 ;.....5...a&../".| L_f730: .db $81,$0e .db $fe,$ef,$9a RTS .else CDISP: BSR CDNUM ; FETCH ADDRESS ANDB #$F0 ; FORCE TO 16 BOUNDARY TFR D,Y ; SAVE IN Y LEAX 15,Y ; DEFAULT LENGTH BCS CDISPS ; BRANCH IF END OF INPUT BSR CDNUM ; OBTAIN COUNT LEAX D,Y ; ASSUME COUNT, COMPUTE END ADDR CDISPS: PSHS Y,X ; SETUP PARAMETERS FOR HSDATA CMPD 2,S ; ? WAS IT COUNT BLS CDCNT ; BRANCH YES STD ,S ; STORE HIGH ADDRESS CDCNT: JSR [VECTAB+offset_HSDTA,PC] ; CALL PRINT ROUTINE PULS PC,U,Y ; CLEAN STACK AND END COMMAND ; OBTAIN NUMBER - ABORT IF NONE ; ONLY DELIMITERS OF CR, BLANK, OR '/' ARE ACCEPTED ; OUTPUT: D=VALUE, C=1 IF CARRIAGE RETURN DELIMITER, ; ELSE C=0 CDNUM: LBSR BLDNUM ; OBTAIN NUMBER BNE CDBADN ; BRANCH IF INVALID CMPA #'/' ; ? VALID DELIMITER BHI CDBADN ; BRANCH IF NOT FOR ERROR CMPA #CR+1 ; LEAVE COMPARE FOR CARRIAGE RETURN LDD NUMBER ; LOAD NUMBER RTS ; RETURN WITH COMPARE .endif L_f736: .db $16,$fa,$83 .db $8d,$ec .db $1f,$02 .db $8d,$e8 .db $6f,$e3 .db $35,$26 .db $ad,$9d,$f8,$9c .db $ad,$9d,$f8,$9a .db $34,$01 .db $ad,$9d,$f8,$97 .db $35,$03 .db $26,$e1 .db $35,$b2 CLOAD: .db $8d,$01 .db $01 .db $33,$f1 .db $33,$d4 .db $27,$03 L_f760: .db $8d,$c5 .db $8e .db $4f .db $5f .db $34,$4e .db $20,$da .db $8d,$ef .db $ff .db $8d,$b9 .db $fd,$ef,$91 CDOT: .db $33,$62 CTRCE3: .db $ee,$f8 ; divireges from original code... .db $0a,$ff,$ef,$99,$a6,$e4,$85,$bf,$a7,$e4,$fe ;.3b.............| L_f780: .db $ef,$f5,$ce,$06,$02,$ed,$42, .db $3b,$8d,$9d,$fd,$ef,$f1 RTS L_f78e: .db $27,$06 ;......B;.....9'.| L_f790: .db $8f,$95 .db $ff,$ef,$f7 RTS L_f796: .db $30,$6e .db $bf,$ef,$f7 RTS L_f79c: .db $8d,$89,$1f,$01 ;.....90n...9....| L_f7a0: .db $8d,$85,$32,$01,$34,$30,$a3,$e4,$ed,$e4,$30,$61,$1d,$a1,$e4,$26 ;..2.40....0a...&| L_f7b0: .db $03 SWI .db $06 .db $ee,$e4,$33,$5f,$ef,$84 SWI .db $05 SWI .db $06 .db $35,$96,$27 ;.?...3_..?.?.5.'| L_f7c0: .db $25,$17,$fd,$c7,$27,$2e,$81,$2d,$26,$41,$17,$fd,$bf,$27,$04,$7f ;%...'..-&A...'..| L_f7d0: .db $ef,$f9 RTS L_f7d2: .db $8d,$43,$5b,$2b,$33,$ad,$a1,$27,$f9,$af,$a1,$af,$3c ;..9.C[+3..'....<| L_f7e0: .db $5b,$2b,$f9,$7a,$ef,$f9,$8d,$2f,$27,$e9,$30,$a1 SWI .db $05 .db $5a,$26 ;[+.z.../'.0.?.Z&| L_f7f0: .db $f9 SWI .db $07 RTS L_f7f3: .db $8d,$21,$c1,$08,$27,$11,$a6,$84,$e7,$84,$e1,$84 ;.?.9.!..'.......| L_f800: .db $26,$09,$a7,$84,$5a,$2b,$07,$ac,$a1,$26,$f9,$16,$f9,$ae,$af,$a4 ;&...Z+...&......| L_f810: .db $6f,$31,$7c,$ef,$f9,$20,$cf,$be,$ef,$9a,$31,$8d,$f7,$93,$f6,$ef ;o1|.. ....1.....| L_f820: .db $f9 RTS L_f822: .db $6f,$e2,$5f,$30,$8c SWI .db $3f .db $00,$81,$5b,$26,$06,$86,$10 ;.9o._0.??..[&...| L_f830: .db $a7,$e4 SWI .db $00,$81,$0d,$27,$0c,$6d,$84,$2b,$cf,$a1,$81,$26,$f8 ;..?...'.m.+...&.| L_f840: .db $eb,$1f,$20,$ee,$30,$8c,$49,$1f,$98,$84,$60,$aa,$e4,$a7,$e4,$c4 ;.. .0.I...`.....| L_f850: .db $9f,$6d,$84,$27,$b6,$e1,$81,$26,$f8,$e6,$1f,$ea,$e4,$e7,$e4,$30 ;.m.'...&.......0| L_f860: .db $e4 SWI .db $04 SWI .db $06 .db $35,$84,$41,$04,$42,$05,$44,$06,$48,$01,$48 ;.?.?.5.A.B.D.H.H| L_f870: .db $01,$48,$01,$48,$00,$2c,$00,$2d,$09,$2d,$01,$53,$70,$59,$30,$55 ;.H.H.,.-.-.SpY0U| L_f880: .db $51,$58,$11,$2b,$07,$2b,$01,$50,$80,$43,$00,$52,$00,$5d,$00,$ff ;QX.+.+.P.C.R.]..| L_f890: .db $11,$84,$11,$00,$12,$88,$13,$89,$14,$86,$15,$85,$16,$8b,$17,$80 ;................| L_f8a0: .db $19,$81,$19,$82,$1a,$83,$82,$8c,$83,$8d,$03,$9f,$00 ;; F8A0 19 81 19 82 1A 83 82 8C 83 8D 03 9F 00 .db "SLAWE!TIMEOUT" .db $05 .db "SLAVE!AEDRESS!=!" .db $05 .db $27,$06,$17,$fe L_f8d0: .db $57,$fd,$ef,$8b,$31,$8d,$e5 SWI .db $03,$8f,$ef,$8b SWI .db $05 SWI .db $06 L_f8e0: .db $bf,$ef,$8b,$32,$7f,$6f,$61,$ad,$9f,$ef,$d7,$24,$1e,$81,$1b,$27 ;...2.oa....$...'| L_f8f0: .db $41,$c7,$c9,$e7,$e4,$6d,$89,$00,$ff,$2b,$07,$6b,$e5,$27,$29,$21 ;A....m...+.k.')!| L_f900: .db $f5,$a7,$89,$01,$fe,$87,$81,$a7,$89,$01,$ff,$6a,$61,$26,$d8,$c6 ;...........ja&..| L_f910: .db $0b,$e7,$61,$6d,$89,$01,$fd,$2a,$cf,$a7,$89,$01,$fd,$6f,$89,$00 ;..am...*.....o..| L_f920: .db $fd,$ad,$9f,$ef,$dd,$21,$c1,$31,$8d,$83 SWI .db $03 SWI .db $07,$17,$ff ;.....!.1..?.?...| L_f930: .db $b7,$33,$63 RTS L_f934: .db $17,$fd,$f0,$1f,$03,$17,$fd,$eb,$35,$07,$17,$fd ;.3c9........5...| L_f940: .db $e7,$e7,$a1,$11,$ad,$e5,$23,$f9,$35,$07 RTS L_f94b: .db $17,$fd,$d9,$1f,$03 ;......#.5.9.....| L_f950: .db $17,$fd,$d5,$35,$07,$17,$fd,$cf,$35,$07,$af,$63,$a6,$a1,$a7,$81 ;...5....5..c....| L_f960: .db $ef,$e5,$83,$01,$01,$ed,$e5,$27,$f3,$33,$65 RTS L_f96c: .db $11,$8e,$ed,$01 ;.......'.3e9....| L_f970: .db $33,$e5,$a7,$d9,$0b,$35,$03,$ec,$4b,$c3,$01,$01,$ed,$4b,$35,$05 ;3....5..K....K5.| L_f980: .db $33,$8d,$01,$21,$e1,$85,$27,$09,$ed,$01,$31,$8d,$01,$17,$ad,$8b ;3..!..'...1.....| L_f990: .db $3b,$a7,$85,$81,$ff,$27,$05,$31,$03,$21,$e9,$a6,$c5,$85,$ff,$a7 ;;....'.1.!......| L_f9a0: .db $c5,$6f,$43,$3b,$89,$01,$b6,$8b,$01,$71,$8c,$01,$05,$8b,$01,$e9 ;.oC;.....q......| L_f9b0: .db $8f,$01,$ef,$8f,$03,$49,$07,$03,$6b,$ff L_f9ba: ;;;RESET: .db $8f,$01,$01,$ed,$85,$1f L_f9c0: .db $03,$63,$85,$a6,$85,$11,$83,$87,$cd,$27,$07,$10,$af,$84,$17,$f6 ;.c.......'......| L_f9d0: .db $63,$11,$ce,$ef,$76,$17,$f6,$32,$10,$8e,$80,$00,$a6,$a4,$1f,$89 ;c...v..2........| L_f9e0: .db $63,$a4,$a8,$a4,$e7,$a4,$81,$ff,$26,$0c,$31,$a9,$01,$00,$10,$8c ;c.......&.1.....| L_f9f0: .db $9f,$ff,$24,$03,$20,$e7,$1f,$24,$ce,$ed,$01,$30,$8d,$03,$83,$c6 ;..$. ..$...0....| L_fa00: .db $20,$31,$c9,$02,$0d,$a6,$80,$a7,$a0,$5a,$26,$f9,$10,$8e,$ec,$00 ; 1.......Z&.....| L_fa10: .db $17,$02,$c9,$10,$8e,$ee,$2d,$cc,$fd,$a2,$ed,$a4,$cc,$fa,$59,$ed ;......-.......Y.| L_fa20: .db $22,$cc,$fc,$29,$ed,$24,$cc,$fa,$59,$ed,$26,$1f,$41,$10,$8e,$00 ;"..).$..Y.&.A...| L_fa30: .db $00,$ec,$29,$c3,$00,$00,$34,$06,$1f,$12,$ce,$80,$00,$86,$80,$1f ;..)...4.........| L_fa40: .db $8b,$cc,$00,$00,$1c,$af,$35,$80,$16,$ff,$86,$10,$8e,$ee,$2d,$ad ;......5.......-.| L_fa50: .db $b4,$10,$8e,$ee,$2d,$ad,$b8,$02,$3b RTS L_fa5a: .db $ec,$46,$34,$06,$ae,$44 ;....-...;9.F4..D| L_fa60: .db $17,$01,$f2,$25,$0d,$a7,$80,$ec,$e4,$83,$00,$01,$ed,$e4,$26,$f0 ;...%..........&.| L_fa70: .db $21,$0c,$87,$01,$aa,$c4,$a7,$c4,$86,$f4,$a7,$42,$20,$08,$86,$fe ;!..........B ...| L_fa80: .db $a5,$c4,$a7,$c4,$6f,$42,$ec,$46,$a3,$e1,$ed,$46 RTS L_fa8d: .db $ae,$44,$ec ;....oB.F...F9.D.| L_fa90: .db $46,$34,$07,$a6,$80,$17,$01,$fb,$10,$25,$ff,$d6,$ec,$e4,$83,$00 ;F4.......%......| L_faa0: .db $01,$ed,$e5,$26,$ee,$16,$ff,$d6,$32,$7b,$ef,$63,$ae,$44,$ec,$46 ;...&....2{.c.D.F| L_fab0: .db $ed,$61,$33,$a9,$02,$0d,$a7,$80,$6d,$c9,$00,$01,$27,$0b,$81,$61 ;.a3.....m...'..a| L_fac0: .db $25,$06,$81,$7b,$22,$03,$85,$df,$a7,$e5,$17,$01,$c6,$25,$31,$ec ;%..{"........%1.| L_fad0: .db $61,$83,$01,$01,$ed,$61,$27,$15,$a6,$e4,$a1,$c9,$00,$0b,$26,$d6 ;a....a'.......&.| L_fae0: .db $6d,$c9,$01,$05,$27,$07,$87,$0a,$17,$01,$a9,$25,$13,$ee,$63,$ec ;m...'......%..c.| L_faf0: .db $47,$a3,$61,$ed,$46,$33,$65,$6f,$42,$e7,$c5,$c4,$fe,$e7,$c5 RTS ;G.a.F3eoB......9| L_fb00: .db $ef,$63,$ed,$46,$a3,$61,$ed,$46,$33,$65,$c7,$f4,$e7,$42,$e6,$c4 ;.c.F.a.F3e...B..| L_fb10: .db $cb,$01,$e7,$c4 RTS L_fb15: .db $33,$7b,$ae,$44,$ef,$63,$ed,$46,$ed,$61,$33 ;....93{.D.c.F.a3| L_fb20: .db $a9,$03,$0d,$17,$01,$2f,$25,$43,$a7,$e5,$a7,$81,$ed,$61,$83,$01 ;...../%C.....a..| L_fb30: .db $01,$ed,$61,$27,$37,$a7,$e5,$4d,$27,$e9,$6d,$c9,$01,$01,$27,$03 ;..a'7..M'.m...'.| L_fb40: .db $17,$01,$4f,$a1,$c9,$01,$0b,$27,$1f,$a1,$c9,$01,$09,$27,$07,$17 ;..O....'.....'..| L_fb50: .db $01,$3d,$17,$ff,$cf,$a1,$c9,$00,$0a,$27,$07,$17,$01,$33,$17,$ff ;.=.......'...3..| L_fb60: .db $c3,$17,$01,$2f,$16,$ff,$bd,$17,$01,$29,$5f,$e7,$e4,$ef,$63,$ed ;.../.....)_...c.| L_fb70: .db $47,$a3,$61,$ed,$47,$e7,$e5,$33,$65,$27,$0b,$c7,$f5,$e7,$43,$e7 ;G.a.G..3e'....C.| L_fb80: .db $c7,$cb,$01,$e7,$c5 RTS L_fb86: .db $6f,$43,$e7,$c5,$c5,$ff,$e7,$c5 L_fb8e: RTS L_fb8f: RTS L_fb90: .db $3b RTS RTS L_fb93: .db $e7,$43,$27,$0d,$c1,$01,$11,$27,$01,$1f,$c1,$ff,$11 ;;99.C'....'.....| L_fba0: .db $27,$01,$31 RTS L_fba4: .db $ae,$45,$31,$a9,$03,$0d,$c7,$20,$a7,$a1,$a7,$81 ;'.19.E1.... ....| L_fbb0: .db $5b,$27,$f9,$6f,$43,$a7,$c5,$85,$fe,$a7,$c5 RTS L_fbbc: .db $17,$01,$81,$25 ;['.oC......9...%| L_fbc0: .db $09,$6f,$43,$e6,$c4,$c5,$ff,$e7,$c4 RTS L_fbca: .db $e7,$42,$e6,$c4,$cb,$01 ;.oC......9.B....| L_fbd0: .db $e7,$c4 RTS L_fbd3: .db $6d,$a4,$27,$0b,$6f,$42,$6f,$a5,$e7,$c5,$c5,$ff,$e7 ;..9m.'.oBo......| L_fbe0: .db $c5 RTS L_fbe2: .db $c7,$f6,$e7,$43,$e7,$c4,$ca,$01,$e7,$c4 RTS L_fbed: .db $e6,$42,$27 ;.9...C......9.B'| L_fbf0: .db $01 RTS L_fbf2: .db $34,$30,$ae,$44,$c6,$20,$31,$a9,$02,$0d,$a6,$80,$a7,$a0 ;.940.D. 1.......| L_fc00: .db $5a,$26,$f9,$35,$30,$6f,$42,$e6,$c4,$c4,$fe,$e7,$c4 RTS L_fc0e: .db $30,$a9 ;Z&.50oB......90.| L_fc10: .db $02,$2d,$6e,$98,$04 L_fc15: .db " PROGRAM TERMINATED", CR .db $86,$01,$8e,$fc,$15,$10,$8e L_fc30: .db $00,$1e,$10 SWI .db $8c,$cc,$ff,$ff,$83,$00,$01,$26,$fb SWI .db $0a,$6d ;...?.......&.?.m| L_fc40: .db $21,$26,$0c,$e6,$a9,$01,$06,$26,$04,$53,$c6,$f6 RTS L_fc4d: .db $5f RTS, .db $6f ;!&.....&.S..9_9o| L_fc50: .db $21,$53,$c6,$f4 RTS L_fc55: .db $34,$10 .db $6d,$21,$26,$30,$6d,$a9,$01,$06,$27 ;!S..94.m!&0m...'| L_fc60: .db $f6,$1a,$10,$30,$22,$ec,$a9,$01,$04,$a6,$8b,$34,$02,$6a,$a9,$01 ;...0"......4.j..| L_fc70: .db $06,$ec,$a9,$01,$04,$c3,$00,$01,$10,$83,$01,$00,$26,$03,$cc,$00 ;............&...| L_fc80: .db $00,$ed,$a9,$01,$04,$1c,$ef,$35,$12,$5f RTS L_fc8b: .db $6f,$21,$53,$c6,$f4 L_fc90: .db $35,$10 RTS L_fc92: .db $34,$10 .db $30,$a9,$01,$07,$34,$02,$ec,$a9,$02,$07,$30 ;5.94.0...4.....0| L_fca0: .db $8b,$35,$03,$a7,$84,$ec,$a9,$02,$07,$c3,$00,$01,$10,$83,$01,$00 ;.5..............| L_fcb0: .db $26,$03,$cc,$00,$00,$ed,$a9,$02,$07,$1a,$10,$e6,$a9,$02,$0b,$26 ;&..............&| L_fcc0: .db $11,$c6,$20,$8e,$ea,$00,$ea,$a9,$02,$0c,$ca,$80,$e7,$a9,$02,$0c ;.. .............| L_fcd0: .db $e7,$84,$6c,$a9,$02,$0b,$1c,$ef,$35,$10,$5f RTS L_fcdc: .db $34,$30,$cc,$00 ;..l.....5._940..| L_fce0: .db $01,$ed,$a9,$01,$02,$ed,$a9,$01,$04,$ed,$a9,$02,$07,$ed,$a9,$02 ;................| L_fcf0: .db $09,$6f,$a9,$01,$06,$6f,$a9,$02,$0b,$6f,$21,$30,$a9,$02,$0d,$e6 ;.o...o...o!0....| L_fd00: .db $89,$00,$14,$ca,$80,$e7,$a9,$02,$0c,$c6,$03,$8e,$ea,$00,$e7,$84 ;................| L_fd10: .db $e7,$a9,$03,$0c,$e7,$85,$30,$a9,$02,$0d,$e6,$89,$00,$15,$86,$ff ;......0.........| L_fd20: .db $17,$01,$0b,$8e,$ea,$00,$e6,$84,$e6,$01,$35,$30,$5f RTS L_fd2e: .db $34,$50 ;..........50_94P| L_fd30: .db $c1,$07,$23,$02,$53 RTS L_fd36: .db $8e,$e8,$01,$81,$ff,$27,$0b,$87,$83,$a7 ;..#.S9.....'....| L_fd40: .db $01,$6f,$85,$87,$83,$a7,$01,$33,$8d,$01,$1f,$87,$03,$3d,$33,$cb ;.o.....3.....=3.| L_fd50: .db $ed,$c5,$ed,$04,$e6,$a9,$02,$0c,$c4,$fd,$eb,$42,$e7,$a9,$03,$0c ;...........B....| L_fd60: .db $8f,$eb,$01,$e7,$85,$35,$51,$5f RTS L_fd69: .db $04,$e1,$01,$03,$40,$01,$01 ;.....5Q_9....@..| L_fd70: .db $8d,$03,$01,$33,$02,$01,$19,$02,$01,$33,$01,$00,$19,$01,$01,$0d ;...3.....3......| L_fd80: .db $01,$01,$00,$00,$00,$01,$00,$01,$00,$00,$09,$18,$0d,$00,$01,$01 ;................| L_fd90: .db $01,$00,$01,$08,$00,$15,$07,$01,$01,$01,$01,$01,$01,$01,$01,$01 ;................| L_fda0: .db $01,$01,$cf,$ed,$00,$8f,$ea,$00,$a7,$84,$85,$74,$26,$0d,$85,$01 ;...........t&...| L_fdb0: .db $11,$26,$01,$10,$85,$03,$11,$26,$00,$49,$8e,$eb,$01,$a6,$01,$87 ;.&.....&.I......| L_fdc0: .db $f5,$a7,$41 RTS L_fdc4: .db $a6,$01,$35,$02,$81,$0d,$26,$04,$86,$ff,$a7,$c4 ;..A9..5...&.....| L_fdd0: .db $31,$42,$ec,$c9,$01,$02,$31,$8b,$35,$02,$a7,$84,$ec,$c9,$01,$02 ;1B....1.5.......| L_fde0: .db $c3,$00,$01,$10,$83,$01,$00,$26,$03,$cc,$00,$00,$ed,$c9,$01,$02 ;.......&........| L_fdf0: .db $e7,$c9,$01,$06,$4f,$c3,$00,$01,$e7,$c9,$01,$06,$10,$83,$01,$00 ;....O...........| L_fe00: .db $27,$b8 RTS L_fe02: .db $30,$c9,$01,$07,$ec,$c9,$02,$09,$a6,$8b,$8e,$ea,$00 ;'.90............| L_fe10: .db $a7,$01,$ec,$c9,$02,$09,$c3,$00,$01,$10,$83,$01,$00,$26,$03,$cc ;.............&..| L_fe20: .db $00,$00,$ed,$c9,$02,$09,$6a,$c9,$02,$0b,$26,$11,$8e,$ea,$00,$86 ;......j...&.....| L_fe30: .db $df,$a4,$c9,$02,$0c,$8a,$80,$a7,$c9,$02,$0c,$a7,$84 RTS ; ff from here on: ;L_fe3e: .db $ff,$ff ;L_fe40: .db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff .fill $ff, $fffd-$ .org $ffd0 L_ffd0: .db $ff,$ff .db $ff,$ff ;*************************************************** ; DEFAULT INTERRUPT TRANSFERS * ;*************************************************** .if original = 1 RSRVD: .db $6e,$9d,$ef,$ed SWI3: .db $6e,$9d,$ef,$eb SWI2: .db $6e,$9d,$ef,$e9 FIRQ: .db $6f,$9d,$ef,$e7 ; 6f is d0 high error IRQ: .db $6e,$9d,$ef,$e5 SWI: .db $6e,$9d,$ef,$e3 NMI: .db $6e,$9d,$ef,$e1 .else RSRVD: JMP [VECTAB+offset_RSVD,PC] ; RESERVED VECTOR SWI3: JMP [VECTAB+offset_SWI3,PC] ; SWI3 VECTOR SWI2: JMP [VECTAB+offset_SWI2,PC] ; SWI2 VECTOR FIRQ: JMP [VECTAB+offset_FIRQ,PC] ; FIRQ VECTOR IRQ: JMP [VECTAB+offset_IRQ,PC] ; IRQ VECTOR SWI: JMP [VECTAB+offset_SWI,PC] ; SWI VECTOR NMI: JMP [VECTAB+offset_NMI,PC] ; NMI VECTOR .endif ;***************************************************** ; ASSIST09 HARDWARE VECTOR TABLE ; THIS TABLE IS USED IF THE ASSIST09 ROM ADDRESSES ; THE MC6809 HARDWARE VECTORS. ;***************************************************** ; ORG ROMBEG+ROMSIZ-16 ; SETUP HARDWARE VECTORS L_fff0: .dw RSRVD ; RESERVED SLOT .dw SWI3 ; SOFTWARE INTERRUPT 3 .dw SWI2 ; SOFTWARE INTERRUPT 2 .dw FIRQ ; FAST INTERRUPT REQUEST .dw IRQ ; INTERRUPT REQUEST .dw SWI ; SOFTWARE INTERRUPT .dw NMI ; NON-MASKABLE INTERRUPT .if original = 1 .dw $f9ba .else .dw RESET ; RESTART .endif .end